/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package entityprojet;

import entityprojet.exceptions.IllegalOrphanException;
import entityprojet.exceptions.NonexistentEntityException;
import entityprojet.exceptions.PreexistingEntityException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityNotFoundException;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;

/**
 *
 * @author Ron
 */
public class FDepotJpaController implements Serializable {

    public FDepotJpaController(EntityManagerFactory emf) {
        this.emf = emf;
    }
    private EntityManagerFactory emf = null;

    public FDepotJpaController() {
        this.emf = Persistence.createEntityManagerFactory("projetT_RPU");
    }
    
    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(FDepot FDepot) throws PreexistingEntityException, Exception {
        if (FDepot.getFComptetCollection() == null) {
            FDepot.setFComptetCollection(new ArrayList<FComptet>());
        }
        if (FDepot.getFDocenteteCollection() == null) {
            FDepot.setFDocenteteCollection(new ArrayList<FDocentete>());
        }
        if (FDepot.getFDepotemplCollection() == null) {
            FDepot.setFDepotemplCollection(new ArrayList<FDepotempl>());
        }
        if (FDepot.getFRessourceprodCollection() == null) {
            FDepot.setFRessourceprodCollection(new ArrayList<FRessourceprod>());
        }
        if (FDepot.getFCaisseCollection() == null) {
            FDepot.setFCaisseCollection(new ArrayList<FCaisse>());
        }
        if (FDepot.getFDocligneCollection() == null) {
            FDepot.setFDocligneCollection(new ArrayList<FDocligne>());
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            FDepotempl cbDPNoDefaut = FDepot.getCbDPNoDefaut();
            if (cbDPNoDefaut != null) {
                cbDPNoDefaut = em.getReference(cbDPNoDefaut.getClass(), cbDPNoDefaut.getCbMarq());
                FDepot.setCbDPNoDefaut(cbDPNoDefaut);
            }
            Collection<FComptet> attachedFComptetCollection = new ArrayList<FComptet>();
            for (FComptet FComptetCollectionFComptetToAttach : FDepot.getFComptetCollection()) {
                FComptetCollectionFComptetToAttach = em.getReference(FComptetCollectionFComptetToAttach.getClass(), FComptetCollectionFComptetToAttach.getCbMarq());
                attachedFComptetCollection.add(FComptetCollectionFComptetToAttach);
            }
            FDepot.setFComptetCollection(attachedFComptetCollection);
            Collection<FDocentete> attachedFDocenteteCollection = new ArrayList<FDocentete>();
            for (FDocentete FDocenteteCollectionFDocenteteToAttach : FDepot.getFDocenteteCollection()) {
                FDocenteteCollectionFDocenteteToAttach = em.getReference(FDocenteteCollectionFDocenteteToAttach.getClass(), FDocenteteCollectionFDocenteteToAttach.getCbMarq());
                attachedFDocenteteCollection.add(FDocenteteCollectionFDocenteteToAttach);
            }
            FDepot.setFDocenteteCollection(attachedFDocenteteCollection);
            Collection<FDepotempl> attachedFDepotemplCollection = new ArrayList<FDepotempl>();
            for (FDepotempl FDepotemplCollectionFDepotemplToAttach : FDepot.getFDepotemplCollection()) {
                FDepotemplCollectionFDepotemplToAttach = em.getReference(FDepotemplCollectionFDepotemplToAttach.getClass(), FDepotemplCollectionFDepotemplToAttach.getCbMarq());
                attachedFDepotemplCollection.add(FDepotemplCollectionFDepotemplToAttach);
            }
            FDepot.setFDepotemplCollection(attachedFDepotemplCollection);
            Collection<FRessourceprod> attachedFRessourceprodCollection = new ArrayList<FRessourceprod>();
            for (FRessourceprod FRessourceprodCollectionFRessourceprodToAttach : FDepot.getFRessourceprodCollection()) {
                FRessourceprodCollectionFRessourceprodToAttach = em.getReference(FRessourceprodCollectionFRessourceprodToAttach.getClass(), FRessourceprodCollectionFRessourceprodToAttach.getCbMarq());
                attachedFRessourceprodCollection.add(FRessourceprodCollectionFRessourceprodToAttach);
            }
            FDepot.setFRessourceprodCollection(attachedFRessourceprodCollection);
            Collection<FCaisse> attachedFCaisseCollection = new ArrayList<FCaisse>();
            for (FCaisse FCaisseCollectionFCaisseToAttach : FDepot.getFCaisseCollection()) {
                FCaisseCollectionFCaisseToAttach = em.getReference(FCaisseCollectionFCaisseToAttach.getClass(), FCaisseCollectionFCaisseToAttach.getCbMarq());
                attachedFCaisseCollection.add(FCaisseCollectionFCaisseToAttach);
            }
            FDepot.setFCaisseCollection(attachedFCaisseCollection);
            Collection<FDocligne> attachedFDocligneCollection = new ArrayList<FDocligne>();
            for (FDocligne FDocligneCollectionFDocligneToAttach : FDepot.getFDocligneCollection()) {
                FDocligneCollectionFDocligneToAttach = em.getReference(FDocligneCollectionFDocligneToAttach.getClass(), FDocligneCollectionFDocligneToAttach.getCbMarq());
                attachedFDocligneCollection.add(FDocligneCollectionFDocligneToAttach);
            }
            FDepot.setFDocligneCollection(attachedFDocligneCollection);
            em.persist(FDepot);
            if (cbDPNoDefaut != null) {
                cbDPNoDefaut.getFDepotCollection().add(FDepot);
                cbDPNoDefaut = em.merge(cbDPNoDefaut);
            }
            for (FComptet FComptetCollectionFComptet : FDepot.getFComptetCollection()) {
                FDepot oldCbDENoOfFComptetCollectionFComptet = FComptetCollectionFComptet.getCbDENo();
                FComptetCollectionFComptet.setCbDENo(FDepot);
                FComptetCollectionFComptet = em.merge(FComptetCollectionFComptet);
                if (oldCbDENoOfFComptetCollectionFComptet != null) {
                    oldCbDENoOfFComptetCollectionFComptet.getFComptetCollection().remove(FComptetCollectionFComptet);
                    oldCbDENoOfFComptetCollectionFComptet = em.merge(oldCbDENoOfFComptetCollectionFComptet);
                }
            }
            for (FDocentete FDocenteteCollectionFDocentete : FDepot.getFDocenteteCollection()) {
                FDepot oldCbDENoOfFDocenteteCollectionFDocentete = FDocenteteCollectionFDocentete.getCbDENo();
                FDocenteteCollectionFDocentete.setCbDENo(FDepot);
                FDocenteteCollectionFDocentete = em.merge(FDocenteteCollectionFDocentete);
                if (oldCbDENoOfFDocenteteCollectionFDocentete != null) {
                    oldCbDENoOfFDocenteteCollectionFDocentete.getFDocenteteCollection().remove(FDocenteteCollectionFDocentete);
                    oldCbDENoOfFDocenteteCollectionFDocentete = em.merge(oldCbDENoOfFDocenteteCollectionFDocentete);
                }
            }
            for (FDepotempl FDepotemplCollectionFDepotempl : FDepot.getFDepotemplCollection()) {
                FDepot oldDENoOfFDepotemplCollectionFDepotempl = FDepotemplCollectionFDepotempl.getDENo();
                FDepotemplCollectionFDepotempl.setDENo(FDepot);
                FDepotemplCollectionFDepotempl = em.merge(FDepotemplCollectionFDepotempl);
                if (oldDENoOfFDepotemplCollectionFDepotempl != null) {
                    oldDENoOfFDepotemplCollectionFDepotempl.getFDepotemplCollection().remove(FDepotemplCollectionFDepotempl);
                    oldDENoOfFDepotemplCollectionFDepotempl = em.merge(oldDENoOfFDepotemplCollectionFDepotempl);
                }
            }
            for (FRessourceprod FRessourceprodCollectionFRessourceprod : FDepot.getFRessourceprodCollection()) {
                FDepot oldDENoOfFRessourceprodCollectionFRessourceprod = FRessourceprodCollectionFRessourceprod.getDENo();
                FRessourceprodCollectionFRessourceprod.setDENo(FDepot);
                FRessourceprodCollectionFRessourceprod = em.merge(FRessourceprodCollectionFRessourceprod);
                if (oldDENoOfFRessourceprodCollectionFRessourceprod != null) {
                    oldDENoOfFRessourceprodCollectionFRessourceprod.getFRessourceprodCollection().remove(FRessourceprodCollectionFRessourceprod);
                    oldDENoOfFRessourceprodCollectionFRessourceprod = em.merge(oldDENoOfFRessourceprodCollectionFRessourceprod);
                }
            }
            for (FCaisse FCaisseCollectionFCaisse : FDepot.getFCaisseCollection()) {
                FDepot oldDENoOfFCaisseCollectionFCaisse = FCaisseCollectionFCaisse.getDENo();
                FCaisseCollectionFCaisse.setDENo(FDepot);
                FCaisseCollectionFCaisse = em.merge(FCaisseCollectionFCaisse);
                if (oldDENoOfFCaisseCollectionFCaisse != null) {
                    oldDENoOfFCaisseCollectionFCaisse.getFCaisseCollection().remove(FCaisseCollectionFCaisse);
                    oldDENoOfFCaisseCollectionFCaisse = em.merge(oldDENoOfFCaisseCollectionFCaisse);
                }
            }
            for (FDocligne FDocligneCollectionFDocligne : FDepot.getFDocligneCollection()) {
                FDepot oldCbDENoOfFDocligneCollectionFDocligne = FDocligneCollectionFDocligne.getCbDENo();
                FDocligneCollectionFDocligne.setCbDENo(FDepot);
                FDocligneCollectionFDocligne = em.merge(FDocligneCollectionFDocligne);
                if (oldCbDENoOfFDocligneCollectionFDocligne != null) {
                    oldCbDENoOfFDocligneCollectionFDocligne.getFDocligneCollection().remove(FDocligneCollectionFDocligne);
                    oldCbDENoOfFDocligneCollectionFDocligne = em.merge(oldCbDENoOfFDocligneCollectionFDocligne);
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            if (findFDepot(FDepot.getCbMarq()) != null) {
                throw new PreexistingEntityException("FDepot " + FDepot + " already exists.", ex);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(FDepot FDepot) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            FDepot persistentFDepot = em.find(FDepot.class, FDepot.getCbMarq());
            FDepotempl cbDPNoDefautOld = persistentFDepot.getCbDPNoDefaut();
            FDepotempl cbDPNoDefautNew = FDepot.getCbDPNoDefaut();
            Collection<FComptet> FComptetCollectionOld = persistentFDepot.getFComptetCollection();
            Collection<FComptet> FComptetCollectionNew = FDepot.getFComptetCollection();
            Collection<FDocentete> FDocenteteCollectionOld = persistentFDepot.getFDocenteteCollection();
            Collection<FDocentete> FDocenteteCollectionNew = FDepot.getFDocenteteCollection();
            Collection<FDepotempl> FDepotemplCollectionOld = persistentFDepot.getFDepotemplCollection();
            Collection<FDepotempl> FDepotemplCollectionNew = FDepot.getFDepotemplCollection();
            Collection<FRessourceprod> FRessourceprodCollectionOld = persistentFDepot.getFRessourceprodCollection();
            Collection<FRessourceprod> FRessourceprodCollectionNew = FDepot.getFRessourceprodCollection();
            Collection<FCaisse> FCaisseCollectionOld = persistentFDepot.getFCaisseCollection();
            Collection<FCaisse> FCaisseCollectionNew = FDepot.getFCaisseCollection();
            Collection<FDocligne> FDocligneCollectionOld = persistentFDepot.getFDocligneCollection();
            Collection<FDocligne> FDocligneCollectionNew = FDepot.getFDocligneCollection();
            List<String> illegalOrphanMessages = null;
            for (FDepotempl FDepotemplCollectionOldFDepotempl : FDepotemplCollectionOld) {
                if (!FDepotemplCollectionNew.contains(FDepotemplCollectionOldFDepotempl)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain FDepotempl " + FDepotemplCollectionOldFDepotempl + " since its DENo field is not nullable.");
                }
            }
            for (FRessourceprod FRessourceprodCollectionOldFRessourceprod : FRessourceprodCollectionOld) {
                if (!FRessourceprodCollectionNew.contains(FRessourceprodCollectionOldFRessourceprod)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain FRessourceprod " + FRessourceprodCollectionOldFRessourceprod + " since its DENo field is not nullable.");
                }
            }
            for (FCaisse FCaisseCollectionOldFCaisse : FCaisseCollectionOld) {
                if (!FCaisseCollectionNew.contains(FCaisseCollectionOldFCaisse)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain FCaisse " + FCaisseCollectionOldFCaisse + " since its DENo field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            if (cbDPNoDefautNew != null) {
                cbDPNoDefautNew = em.getReference(cbDPNoDefautNew.getClass(), cbDPNoDefautNew.getCbMarq());
                FDepot.setCbDPNoDefaut(cbDPNoDefautNew);
            }
            Collection<FComptet> attachedFComptetCollectionNew = new ArrayList<FComptet>();
            for (FComptet FComptetCollectionNewFComptetToAttach : FComptetCollectionNew) {
                FComptetCollectionNewFComptetToAttach = em.getReference(FComptetCollectionNewFComptetToAttach.getClass(), FComptetCollectionNewFComptetToAttach.getCbMarq());
                attachedFComptetCollectionNew.add(FComptetCollectionNewFComptetToAttach);
            }
            FComptetCollectionNew = attachedFComptetCollectionNew;
            FDepot.setFComptetCollection(FComptetCollectionNew);
            Collection<FDocentete> attachedFDocenteteCollectionNew = new ArrayList<FDocentete>();
            for (FDocentete FDocenteteCollectionNewFDocenteteToAttach : FDocenteteCollectionNew) {
                FDocenteteCollectionNewFDocenteteToAttach = em.getReference(FDocenteteCollectionNewFDocenteteToAttach.getClass(), FDocenteteCollectionNewFDocenteteToAttach.getCbMarq());
                attachedFDocenteteCollectionNew.add(FDocenteteCollectionNewFDocenteteToAttach);
            }
            FDocenteteCollectionNew = attachedFDocenteteCollectionNew;
            FDepot.setFDocenteteCollection(FDocenteteCollectionNew);
            Collection<FDepotempl> attachedFDepotemplCollectionNew = new ArrayList<FDepotempl>();
            for (FDepotempl FDepotemplCollectionNewFDepotemplToAttach : FDepotemplCollectionNew) {
                FDepotemplCollectionNewFDepotemplToAttach = em.getReference(FDepotemplCollectionNewFDepotemplToAttach.getClass(), FDepotemplCollectionNewFDepotemplToAttach.getCbMarq());
                attachedFDepotemplCollectionNew.add(FDepotemplCollectionNewFDepotemplToAttach);
            }
            FDepotemplCollectionNew = attachedFDepotemplCollectionNew;
            FDepot.setFDepotemplCollection(FDepotemplCollectionNew);
            Collection<FRessourceprod> attachedFRessourceprodCollectionNew = new ArrayList<FRessourceprod>();
            for (FRessourceprod FRessourceprodCollectionNewFRessourceprodToAttach : FRessourceprodCollectionNew) {
                FRessourceprodCollectionNewFRessourceprodToAttach = em.getReference(FRessourceprodCollectionNewFRessourceprodToAttach.getClass(), FRessourceprodCollectionNewFRessourceprodToAttach.getCbMarq());
                attachedFRessourceprodCollectionNew.add(FRessourceprodCollectionNewFRessourceprodToAttach);
            }
            FRessourceprodCollectionNew = attachedFRessourceprodCollectionNew;
            FDepot.setFRessourceprodCollection(FRessourceprodCollectionNew);
            Collection<FCaisse> attachedFCaisseCollectionNew = new ArrayList<FCaisse>();
            for (FCaisse FCaisseCollectionNewFCaisseToAttach : FCaisseCollectionNew) {
                FCaisseCollectionNewFCaisseToAttach = em.getReference(FCaisseCollectionNewFCaisseToAttach.getClass(), FCaisseCollectionNewFCaisseToAttach.getCbMarq());
                attachedFCaisseCollectionNew.add(FCaisseCollectionNewFCaisseToAttach);
            }
            FCaisseCollectionNew = attachedFCaisseCollectionNew;
            FDepot.setFCaisseCollection(FCaisseCollectionNew);
            Collection<FDocligne> attachedFDocligneCollectionNew = new ArrayList<FDocligne>();
            for (FDocligne FDocligneCollectionNewFDocligneToAttach : FDocligneCollectionNew) {
                FDocligneCollectionNewFDocligneToAttach = em.getReference(FDocligneCollectionNewFDocligneToAttach.getClass(), FDocligneCollectionNewFDocligneToAttach.getCbMarq());
                attachedFDocligneCollectionNew.add(FDocligneCollectionNewFDocligneToAttach);
            }
            FDocligneCollectionNew = attachedFDocligneCollectionNew;
            FDepot.setFDocligneCollection(FDocligneCollectionNew);
            FDepot = em.merge(FDepot);
            if (cbDPNoDefautOld != null && !cbDPNoDefautOld.equals(cbDPNoDefautNew)) {
                cbDPNoDefautOld.getFDepotCollection().remove(FDepot);
                cbDPNoDefautOld = em.merge(cbDPNoDefautOld);
            }
            if (cbDPNoDefautNew != null && !cbDPNoDefautNew.equals(cbDPNoDefautOld)) {
                cbDPNoDefautNew.getFDepotCollection().add(FDepot);
                cbDPNoDefautNew = em.merge(cbDPNoDefautNew);
            }
            for (FComptet FComptetCollectionOldFComptet : FComptetCollectionOld) {
                if (!FComptetCollectionNew.contains(FComptetCollectionOldFComptet)) {
                    FComptetCollectionOldFComptet.setCbDENo(null);
                    FComptetCollectionOldFComptet = em.merge(FComptetCollectionOldFComptet);
                }
            }
            for (FComptet FComptetCollectionNewFComptet : FComptetCollectionNew) {
                if (!FComptetCollectionOld.contains(FComptetCollectionNewFComptet)) {
                    FDepot oldCbDENoOfFComptetCollectionNewFComptet = FComptetCollectionNewFComptet.getCbDENo();
                    FComptetCollectionNewFComptet.setCbDENo(FDepot);
                    FComptetCollectionNewFComptet = em.merge(FComptetCollectionNewFComptet);
                    if (oldCbDENoOfFComptetCollectionNewFComptet != null && !oldCbDENoOfFComptetCollectionNewFComptet.equals(FDepot)) {
                        oldCbDENoOfFComptetCollectionNewFComptet.getFComptetCollection().remove(FComptetCollectionNewFComptet);
                        oldCbDENoOfFComptetCollectionNewFComptet = em.merge(oldCbDENoOfFComptetCollectionNewFComptet);
                    }
                }
            }
            for (FDocentete FDocenteteCollectionOldFDocentete : FDocenteteCollectionOld) {
                if (!FDocenteteCollectionNew.contains(FDocenteteCollectionOldFDocentete)) {
                    FDocenteteCollectionOldFDocentete.setCbDENo(null);
                    FDocenteteCollectionOldFDocentete = em.merge(FDocenteteCollectionOldFDocentete);
                }
            }
            for (FDocentete FDocenteteCollectionNewFDocentete : FDocenteteCollectionNew) {
                if (!FDocenteteCollectionOld.contains(FDocenteteCollectionNewFDocentete)) {
                    FDepot oldCbDENoOfFDocenteteCollectionNewFDocentete = FDocenteteCollectionNewFDocentete.getCbDENo();
                    FDocenteteCollectionNewFDocentete.setCbDENo(FDepot);
                    FDocenteteCollectionNewFDocentete = em.merge(FDocenteteCollectionNewFDocentete);
                    if (oldCbDENoOfFDocenteteCollectionNewFDocentete != null && !oldCbDENoOfFDocenteteCollectionNewFDocentete.equals(FDepot)) {
                        oldCbDENoOfFDocenteteCollectionNewFDocentete.getFDocenteteCollection().remove(FDocenteteCollectionNewFDocentete);
                        oldCbDENoOfFDocenteteCollectionNewFDocentete = em.merge(oldCbDENoOfFDocenteteCollectionNewFDocentete);
                    }
                }
            }
            for (FDepotempl FDepotemplCollectionNewFDepotempl : FDepotemplCollectionNew) {
                if (!FDepotemplCollectionOld.contains(FDepotemplCollectionNewFDepotempl)) {
                    FDepot oldDENoOfFDepotemplCollectionNewFDepotempl = FDepotemplCollectionNewFDepotempl.getDENo();
                    FDepotemplCollectionNewFDepotempl.setDENo(FDepot);
                    FDepotemplCollectionNewFDepotempl = em.merge(FDepotemplCollectionNewFDepotempl);
                    if (oldDENoOfFDepotemplCollectionNewFDepotempl != null && !oldDENoOfFDepotemplCollectionNewFDepotempl.equals(FDepot)) {
                        oldDENoOfFDepotemplCollectionNewFDepotempl.getFDepotemplCollection().remove(FDepotemplCollectionNewFDepotempl);
                        oldDENoOfFDepotemplCollectionNewFDepotempl = em.merge(oldDENoOfFDepotemplCollectionNewFDepotempl);
                    }
                }
            }
            for (FRessourceprod FRessourceprodCollectionNewFRessourceprod : FRessourceprodCollectionNew) {
                if (!FRessourceprodCollectionOld.contains(FRessourceprodCollectionNewFRessourceprod)) {
                    FDepot oldDENoOfFRessourceprodCollectionNewFRessourceprod = FRessourceprodCollectionNewFRessourceprod.getDENo();
                    FRessourceprodCollectionNewFRessourceprod.setDENo(FDepot);
                    FRessourceprodCollectionNewFRessourceprod = em.merge(FRessourceprodCollectionNewFRessourceprod);
                    if (oldDENoOfFRessourceprodCollectionNewFRessourceprod != null && !oldDENoOfFRessourceprodCollectionNewFRessourceprod.equals(FDepot)) {
                        oldDENoOfFRessourceprodCollectionNewFRessourceprod.getFRessourceprodCollection().remove(FRessourceprodCollectionNewFRessourceprod);
                        oldDENoOfFRessourceprodCollectionNewFRessourceprod = em.merge(oldDENoOfFRessourceprodCollectionNewFRessourceprod);
                    }
                }
            }
            for (FCaisse FCaisseCollectionNewFCaisse : FCaisseCollectionNew) {
                if (!FCaisseCollectionOld.contains(FCaisseCollectionNewFCaisse)) {
                    FDepot oldDENoOfFCaisseCollectionNewFCaisse = FCaisseCollectionNewFCaisse.getDENo();
                    FCaisseCollectionNewFCaisse.setDENo(FDepot);
                    FCaisseCollectionNewFCaisse = em.merge(FCaisseCollectionNewFCaisse);
                    if (oldDENoOfFCaisseCollectionNewFCaisse != null && !oldDENoOfFCaisseCollectionNewFCaisse.equals(FDepot)) {
                        oldDENoOfFCaisseCollectionNewFCaisse.getFCaisseCollection().remove(FCaisseCollectionNewFCaisse);
                        oldDENoOfFCaisseCollectionNewFCaisse = em.merge(oldDENoOfFCaisseCollectionNewFCaisse);
                    }
                }
            }
            for (FDocligne FDocligneCollectionOldFDocligne : FDocligneCollectionOld) {
                if (!FDocligneCollectionNew.contains(FDocligneCollectionOldFDocligne)) {
                    FDocligneCollectionOldFDocligne.setCbDENo(null);
                    FDocligneCollectionOldFDocligne = em.merge(FDocligneCollectionOldFDocligne);
                }
            }
            for (FDocligne FDocligneCollectionNewFDocligne : FDocligneCollectionNew) {
                if (!FDocligneCollectionOld.contains(FDocligneCollectionNewFDocligne)) {
                    FDepot oldCbDENoOfFDocligneCollectionNewFDocligne = FDocligneCollectionNewFDocligne.getCbDENo();
                    FDocligneCollectionNewFDocligne.setCbDENo(FDepot);
                    FDocligneCollectionNewFDocligne = em.merge(FDocligneCollectionNewFDocligne);
                    if (oldCbDENoOfFDocligneCollectionNewFDocligne != null && !oldCbDENoOfFDocligneCollectionNewFDocligne.equals(FDepot)) {
                        oldCbDENoOfFDocligneCollectionNewFDocligne.getFDocligneCollection().remove(FDocligneCollectionNewFDocligne);
                        oldCbDENoOfFDocligneCollectionNewFDocligne = em.merge(oldCbDENoOfFDocligneCollectionNewFDocligne);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = FDepot.getCbMarq();
                if (findFDepot(id) == null) {
                    throw new NonexistentEntityException("The fDepot with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws IllegalOrphanException, NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            FDepot FDepot;
            try {
                FDepot = em.getReference(FDepot.class, id);
                FDepot.getCbMarq();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The FDepot with id " + id + " no longer exists.", enfe);
            }
            List<String> illegalOrphanMessages = null;
            Collection<FDepotempl> FDepotemplCollectionOrphanCheck = FDepot.getFDepotemplCollection();
            for (FDepotempl FDepotemplCollectionOrphanCheckFDepotempl : FDepotemplCollectionOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This FDepot (" + FDepot + ") cannot be destroyed since the FDepotempl " + FDepotemplCollectionOrphanCheckFDepotempl + " in its FDepotemplCollection field has a non-nullable DENo field.");
            }
            Collection<FRessourceprod> FRessourceprodCollectionOrphanCheck = FDepot.getFRessourceprodCollection();
            for (FRessourceprod FRessourceprodCollectionOrphanCheckFRessourceprod : FRessourceprodCollectionOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This FDepot (" + FDepot + ") cannot be destroyed since the FRessourceprod " + FRessourceprodCollectionOrphanCheckFRessourceprod + " in its FRessourceprodCollection field has a non-nullable DENo field.");
            }
            Collection<FCaisse> FCaisseCollectionOrphanCheck = FDepot.getFCaisseCollection();
            for (FCaisse FCaisseCollectionOrphanCheckFCaisse : FCaisseCollectionOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This FDepot (" + FDepot + ") cannot be destroyed since the FCaisse " + FCaisseCollectionOrphanCheckFCaisse + " in its FCaisseCollection field has a non-nullable DENo field.");
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            FDepotempl cbDPNoDefaut = FDepot.getCbDPNoDefaut();
            if (cbDPNoDefaut != null) {
                cbDPNoDefaut.getFDepotCollection().remove(FDepot);
                cbDPNoDefaut = em.merge(cbDPNoDefaut);
            }
            Collection<FComptet> FComptetCollection = FDepot.getFComptetCollection();
            for (FComptet FComptetCollectionFComptet : FComptetCollection) {
                FComptetCollectionFComptet.setCbDENo(null);
                FComptetCollectionFComptet = em.merge(FComptetCollectionFComptet);
            }
            Collection<FDocentete> FDocenteteCollection = FDepot.getFDocenteteCollection();
            for (FDocentete FDocenteteCollectionFDocentete : FDocenteteCollection) {
                FDocenteteCollectionFDocentete.setCbDENo(null);
                FDocenteteCollectionFDocentete = em.merge(FDocenteteCollectionFDocentete);
            }
            Collection<FDocligne> FDocligneCollection = FDepot.getFDocligneCollection();
            for (FDocligne FDocligneCollectionFDocligne : FDocligneCollection) {
                FDocligneCollectionFDocligne.setCbDENo(null);
                FDocligneCollectionFDocligne = em.merge(FDocligneCollectionFDocligne);
            }
            em.remove(FDepot);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<FDepot> findFDepotEntities() {
        return findFDepotEntities(true, -1, -1);
    }

    public List<FDepot> findFDepotEntities(int maxResults, int firstResult) {
        return findFDepotEntities(false, maxResults, firstResult);
    }

    private List<FDepot> findFDepotEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(FDepot.class));
            Query q = em.createQuery(cq);
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public FDepot findFDepot(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(FDepot.class, id);
        } finally {
            em.close();
        }
    }

    public int getFDepotCount() {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<FDepot> rt = cq.from(FDepot.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
    
}
